//=============================================================================
/**
 * @file	pkthln_opening.h
 * @brief	開会式&閉会式
 * @author	hosaka genya
 * @date	2008.10.28
 */
//=============================================================================

#ifndef	__PKTHLN_OPENING_H__
#define	__PKTHLN_OPENING_H__

#include "../../pokethlon.h"

typedef struct OPENING_WORK_tag * OPENING_PTR;
typedef struct OPENING_COMM_WORK_tag * OPENING_COMM_PTR;
typedef struct OPED_COMM_CHILD_WORK_tag * OPED_COMM_CHILD_PTR;
typedef struct ENDING_COMM_WORK_tag * ENDING_COMM_PTR;

//--------------------------------------------------------------
///	閉会式 配点
//==============================================================
enum
{
	SCORE_NO_MISS = 10,	///< ノーミス 点
	SCORE_KING = 20,	///< 一番獲得ポイントが多かったポケモンに加算される 点
	SCORE_EFFORT = 10,	///< 努力点(ランダムでアクションポイントから算出)
};

//--------------------------------------------------------------
///	努力賞の種類
//==============================================================
typedef enum
{
	EFFORT_JUMP = 0,
	EFFORT_ATTACK,
	EFFORT_MISS,
	EFFORT_DASH,
	EFFORT_MAX,
	EFFORT_NULL = EFFORT_MAX,
} EFFORT_TYPE;


//--------------------------------------------------------------------
/**
 *							通信データ
 */
//--------------------------------------------------------------------
//--------------------------------------------------------------
///	事前に子機に分配しておくデータ : オープニング
//==============================================================

// 終了の流れ
// 1. 子機が終了フラグを立てて待機
// 2. 親機が子機フラグを集計
// 3. 親機が終了フラグを立てる
// 4.

//--------------------------------------------------------------
///	子機→親機への通信データ
//==============================================================
typedef struct OPED_COMM_CHILD_WORK_tag{
	u8 MsgSeq;		///< メッセージシーケンサ
	u8 bPrinting;	///< メッセージフラグ
	u8 EndFlag;		///< 終了フラグ
	u8 Padding[33];
} OPED_COMM_CHILD_WORK;

//--------------------------------------------------------------
///	通信でやりとりするチーム情報
//==============================================================
typedef struct OP_COMM_TEAM_DATA_WORK_tag {
	u32 BlastMsgIdx;		///< あおりメッセージIDX
	u32 BlastPoint : 24;	///< あおりメッセージに表示するポイント
	u32 FunLevelBit : 8;	///< ファン数(段階)
} OP_COMM_TEAM_DATA;  ///< 8 byte;

//--------------------------------------------------------------
///	親機が保持するデータ
//==============================================================
typedef struct OPENING_COMM_WORK_tag {
	// -- 8*4 = 32 byte --
	OP_COMM_TEAM_DATA TeamData[ ENTRY_MEMBER_NUM_MAX ];
	// -- 2 byte --
	u8 MsgSeq;			///< メッセージシーケンサ
	u8 bMsgWait : 1;	///< メッセージウェイトフラグ
	u8 EndFlag : 1;		///< 終了フラグ
	u8 Padding : 6;
	// -- 2 byte --
	u8  dummy[2];
} OPENING_COMM_WORK;

//--------------------------------------------------------------
///	事前に子機に分配しておくデータ : エンディング
//==============================================================
typedef struct ENDING_COMM_WORK_tag{
	// -- 4 byte --
	u8 PokeBonus[4];		///< 各チームごとのポケモンボーナス値 4 byte
	// -- 4 byte --
	u32 EffortType : 3;		///< 努力賞の項目ID 3 bit
	u32 EffortPoke : 12;	///< 努力賞を取ったポケモンbitID 12 bit
	u32 NoMissPoke : 12;	///< ノーミスのポケモンbitID 12 bit
	u32 dummy : 5;
	// -- 4 byte --
	u32 EffortPoint : 16;	///< 努力賞の項目値 2 byte
	u32 KingPoke : 12;		///< ポイント王 12 bit
	u32 bMsgWait : 1;		///< メッセージウェイトフラグ
	u32 EndFlag : 1;		///< 終了フラグ
	u32 dummy1 : 2;
	// ▼u8の配列扱い
	// -- 1 byte --
	u8 MsgSeq;			///< メッセージシーケンサ
	// -- 4 byte --
	u8 DrawWinPoint[ ENTRY_MEMBER_NUM_MAX ];	///< 同点時の勝利優先度
	// -- 19 byte --
	u8 dummy3[19];
} ENDING_COMM_WORK;	// 36 byte

//--------------------------------------------------------------------
/*
 *					extern 外部公開関数
 */
//--------------------------------------------------------------------
extern PTH_RC PE_OPENING_InitFunc(PKTHLN_PTR work, void *pParam);
extern BOOL PE_OPENING_DrawFunc(PKTHLN_PTR work, void *pparam);
extern BOOL PE_OPENING_EndFunc(PKTHLN_PTR work, void *pParam);

extern PTH_RC PE_ENDING_InitFunc(PKTHLN_PTR work, void *pParam);
extern BOOL PE_ENDING_DrawFunc(PKTHLN_PTR work, void *pparam);
extern BOOL PE_ENDING_EndFunc(PKTHLN_PTR work, void *pParam);

#endif	//__PKTHLN_OPENING_H__